/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"4F8F6D00-FDE2-42AB-A34B-BD1131A32D2A",variableType:4}
 */
var es_preview = 0;

/**
 *
 * @properties={typeid:24,uuid:"7D0FD583-C067-48AC-AF6B-D2D98B0885A7"}
 */
function agregar_renglon()
{ //  dar alta de un renglon en op_detalle 
	if(proveedor_id==null) 
	{
		globals.DIALOGS.showWarningDialog('Aviso',"Debe informar Proveedor",'OK')
	}
	else
	{
		op_cabecera_to_op_detalle.newRecord(false)
		//op_cabecera_to_op_detalle.op_detalle_marcado=5 // para identifucar una alta
		forms.opago_dev_1_det.prepara_renglon();
	}
}

/**
 *
 * @properties={typeid:24,uuid:"F1936169-E5E6-4E30-838F-A074CBB2EE2D"}
 */
function cancelar() 
{
	databaseManager.revertEditedRecords()
	Iniciar();
}

/**
 *
 * @properties={typeid:24,uuid:"ECBEDA29-55E1-4BD2-8916-974E38028B22"}
 * @AllowToRunInFind
 */
function confirmar() 
{
	if (globals.gtotal_valores == 0 ) 
	{
		globals.DIALOGS.showWarningDialog('Aviso',"Debe ingresar valores",'OK')
		return false; 
	}
	
	if (globals.gtotal_valores > globals.gtotal_comprob)
	{
		globals.DIALOGS.showWarningDialog('Aviso',"Valores ingresados supera el importe original",'OK')
		return false;
	}
	
	if (globals.zparam_usa_proyecto == 1 && proyecto_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso',"Debe ingresar el proyecto",'OK')
		return false;
	}
	
	var estado = validar_fecha_pago(); //  para asegurar que fecha_pago de cheques no tiene null
	if (estado == false) 
		return false;  
	
	var estado = totalizar() 
	if (estado == false)     
		return false;   
   
//// NUMERACION DEVOLUCION de PAGO
	var fs_nro_op = databaseManager.getFoundSet(databaseManager.getDataSourceServerName(controller.getDataSource()),'numeracion_pr')
	//databaseManager.refreshRecordFromDatabase(fs_nro_op,-1) // no refrescaba y daba error de OP duplicada
	fs_nro_op.find()
	fs_nro_op.sucursal 			= sucursal
	fs_nro_op.letra				= letra
	fs_nro_op.cod_comprobante	= globals.zparam_codigo_opago_devol
	var found = fs_nro_op.search()
	if (found != 1)
    {	
    	globals.DIALOGS.showWarningDialog('Aviso','Sucursal o Tipo de comprobante incorrectos al buscar numeracion','OK')
    	return false; 
    }
    else
    {	
		fs_nro_op.setSelectedIndex(1)
		var nro_aux = fs_nro_op.ultimo_numero + 1  
		globals.duplicacion_op_cabecera(letra,sucursal,nro_aux,globals.zparam_codigo_opago)
		if (globals.gfilas != 0)  // si es cero, la factura no existe
		{ // ya existe , lo rechaza
			globals.DIALOGS.showWarningDialog('Aviso','Ya existe Devolución Pago a proveedor ' + letra + '-' + utils.numberFormat(sucursal,'0000') + '-' + utils.numberFormat(nro_aux,'00000000'),'OK');
			return false;
		}
     } 
	  
	fs_nro_op.ultimo_numero = fs_nro_op.ultimo_numero + 1
      
//// DATOS CABECERA   
	nro_comprobante			= fs_nro_op.ultimo_numero
	codigo_movimiento		= globals.zparam_codigo_opago_devol
	chofer_id				= 0
	globals.greten_ganan 	= 0	
    globals.greten_iva 		= 0
	importe 				= globals.gtotal_valores   
	importe_en_letras		= globals.nro_a_letra(importe); 
	total_valores			= globals.gtotal_valores;       
	total_retenciones		= globals.gtotal_retenciones; 
	total_comprobantes		= globals.gtotal_comprob ;
	    
//// GRABAR DEVOLUCION PAGO en CTACTE  
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.newRecord()      
	//op_cabecera_to_proveedor.proveedor_to_ctacte_pr.provedor_id=proveedor_id
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cod_mov		= codigo_movimiento
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.fecha_mov	= fecha
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.nro_factura	= nro_comprobante
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.sucursal	= sucursal
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.letra		= letra
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.fecha_vto	= null
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.saldo		= total_valores	
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.importe		= total_valores 
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.neto		= total_valores    
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.iva			= 0 
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.iva_porc	= 0
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.cond_pago_id = 0
	op_cabecera_to_proveedor.proveedor_to_ctacte_pr.concepto	= concepto 
	// para Logistica -> tomar prov. de tabla ciudades, para el resto tomarla de tabla proveedores
	if (op_cabecera_to_proveedor.provincia_id != null)    
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.provincia_id = op_cabecera_to_proveedor.provincia_id;
	else  
		op_cabecera_to_proveedor.proveedor_to_ctacte_pr.provincia_id = op_cabecera_to_proveedor.proveedor_to_ciudades.provincia_id;

	ctacte_pr_id = op_cabecera_to_proveedor.proveedor_to_ctacte_pr.ctacte_pr_id 
	
//// GRABAR CYB  por cada detalle  y CHEQUES  para los que corresponda  ///////////////////////////// 
	var found = op_cabecera_to_op_detalle.getSize() 
	for (var i = 1 ; i <= found ; i++)
	{ // recorre op_detalle
		//// GRABAR CHEQUES   ///////////////
		op_cabecera_to_op_detalle.setSelectedIndex(i)
		if (op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque == 1)	  
		{// es cheque
			if (op_cabecera_to_op_detalle.op_detalle_marcado == 1)
			{ // devuelve un cheque que se le dio -> ya estaba dado de alta -> solo cambia estado
				op_cabecera_to_op_detalle.op_detalle_id_to_cheques.estado = globals.zconf_chq_devol_prov
			}
			else
			{ // el proveedor da un cheque de él u otros -> no estaba dado de alta en el sistema  
				
					var $cheque = op_cabecera_to_op_detalle.op_detalle_id_to_cheques
					op_cabecera_to_op_detalle.op_detalle_id_to_cheques.newRecord() 
				
					$cheque.banco_id			= op_cabecera_to_op_detalle.banco_id 
					$cheque.banco_sucursal		= op_cabecera_to_op_detalle.banco_sucursal //???
					$cheque.boleta_dep			= null
					$cheque.cheque_nro			= op_cabecera_to_op_detalle.cheque_nro
					$cheque.cuentas_cyb_id		= op_cabecera_to_op_detalle.cuentas_cyb_id
					$cheque.estado				= globals.zconf_chq_emitido		
					$cheque.fecha_emision		= op_cabecera_to_op_detalle.fecha_emision_chq
					$cheque.fecha_entrega		= fecha
					$cheque.fecha_pago			= op_cabecera_to_op_detalle.fecha_pago 
					$cheque.importe				= op_cabecera_to_op_detalle.importe
					$cheque.lugar_emision		= op_cabecera_to_op_detalle.lugar_emision // ???
					$cheque.marca_acredit		= 0
					$cheque.moneda_id			= op_cabecera_to_op_detalle.moneda_id
					$cheque.titular				= op_cabecera_to_op_detalle.titular
					$cheque.titular_cuit		= op_cabecera_to_op_detalle.titular_cuit
					$cheque.titular_direccion	= op_cabecera_to_op_detalle.titular_direccion
					$cheque.valor_id			= op_cabecera_to_op_detalle.valor_id
					$cheque.concepto			= "Devolucion Pago: " + nro_comprobante + ' - ' + op_cabecera_to_proveedor.razon_social 
			}  
	    }// fin es cheque
		
	    //// GRABAR MOVIM_CYB para todos los valores
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.newRecord();
		///////////////////////////////////////
		// TODO OJO no queda el cheque_id en op_detalle ( IF ANTERIOR) cuando se ingrea un cheque
		//////////////////////////////////////////////
		if(op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque == 1)
		{//es cheque
			if (op_cabecera_to_op_detalle.op_detalle_marcado != 1) // fue dado de alta
			{ // lo toma del recien ingresado
				op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.cheque_id = op_cabecera_to_op_detalle.cheque_id
			} 
			else // devolvio un cheque dado en pago
			{ // lo toma del cheque que se le dio en pago 
				op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.cheque_id = op_cabecera_to_op_detalle.op_detalle_id_to_cheques.cheque_id
			}
		}
		else
		{// es efectivo
			op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.cheque_id = null;	
		}
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.cod_movim				= globals.zconf_cyb_cod_movim_ingreso;     //1=Ingreso 2=Egreso ver solucion valuelist
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.cuentas_cyb_id		= op_cabecera_to_op_detalle.cuentas_cyb_id;
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.empresa_id			= proveedor_id;   // cabecera
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.fecha_movim			= fecha;         // cabecera
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.importe				= op_cabecera_to_op_detalle.importe;
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.imputacion_id			= globals.zconf_cyb_imputacion_devol_pago_prov;
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.valor_id				= op_cabecera_to_op_detalle.valor_id;
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.concepto				= "Devolucion Pago. : " + nro_comprobante + ' - ' + op_cabecera_to_proveedor.razon_social 
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.marca_conciliacion 	= 0  
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.fecha_conciliacion	= null 
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.referencia			= ''  
		if(op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque == 1 || op_cabecera_to_op_detalle.op_detalle_to_valores.usa_cta_bco == 1)
		 	op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.referencia = op_cabecera_to_op_detalle.cheque_nro; 
		
		// numero de apertura de la caja en cada de MOVCYB
		op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.apertura_id = op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.movim_cyb_to_cuentas_cyb.apertura_id;
		
		////   SALDOS_CAJA suma /////////////////////////////////////////////////
		if (op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.movim_cyb_to_cuentas_cyb.cuentas_tipo == 0) // es cuenta caja
		{
			if(op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque == 1) 
			{// es cheque 
				if (op_cabecera_to_op_detalle.op_detalle_to_valores.es_propio != 1) //es terceros
					op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.movim_cyb_to_cuentas_cyb.cuentas_cyb_to_saldos_caja.saldo_valores += op_cabecera_to_op_detalle.importe
			}
			else // es efectivo
				op_cabecera_to_op_detalle.op_detalle_to_movim_cyb.movim_cyb_to_cuentas_cyb.cuentas_cyb_to_saldos_caja.saldo_efectivo += op_cabecera_to_op_detalle.importe
		}
	} // cierra el for  de ////grabar cyb  por cada detalle  y cheques
	
     
//// GRABAR TODO///////////////////////////////////////////////////////
	var estado = databaseManager.saveData()
	if (estado == true)
	{
		databaseManager.refreshRecordFromDatabase(foundset,0)
		databaseManager.refreshRecordFromDatabase(foundset.op_cabecera_to_op_detalle,-1) 
		databaseManager.refreshRecordFromDatabase(foundset.op_cabecera_to_op_retenciones,-1)
		databaseManager.refreshRecordFromDatabase(foundset.op_cabecera_to_ctacte_pr,0)  
		databaseManager.refreshRecordFromDatabase(foundset.op_cabecera_to_op_retenciones.op_retenciones_to_ctacte_pr,0)	
		databaseManager.refreshRecordFromDatabase(foundset.op_cabecera_to_reten_certificados,0) 
		databaseManager.refreshRecordFromDatabase(foundset.op_cabecera_to_op_detalle.op_detalle_to_cuentas_cyb.cuentas_cyb_to_saldos_caja,-1)

		var resp = globals.DIALOGS.showQuestionDialog('Aviso', 'Devolución Pago ' + letra + utils.numberFormat(sucursal,'0000') + '-' + utils.numberFormat(nro_comprobante,'00000000') +  '\nGenerada correctamente' + '\n¿Imprime?' ,  "Si", "No" )
		if (resp == 'Si')
		{
			es_preview = 1; 
			forms.opago_cabecera_imp_devol.controller.showPrintPreview(true)
			/*var $params = {
			pFacturaId: op_cabecera_id,
			pRazonSocial: uservs_to_uservs.razon_social,
			pDireccion: uservs_to_uservs.calle_nro,
			pCodPostal: uservs_to_uservs.cod_postal,
			pProvincia: uservs_to_uservs.uservs_to_provincias.descripcion,
			pCuit: uservs_to_uservs.cuit,
			pCodBrutos: uservs_to_uservs.cod_ing_brutos,
			pIva: uservs_to_uservs.uservs_to_tipo_iva.tipo_iva_desc,
			tipo_doc: 'Devolución de Pago'
		}
		globals.metodoJasper('impresion','proveedores/orden_pago.jasper','Orden_pago_n'+nro_comprobante,'infocom',$params)*/

		}		
		else
		    Iniciar()  	
	}
	else
	{
		globals.DIALOGS.showWarningDialog('Generador de Devolucion de Pago',  'Devolucion Pago No fue generada',  "OK")
		cancelar()
	}
	return true
}

/**
 *
 * @properties={typeid:24,uuid:"DB9CA439-18E2-4C83-8564-442887093D50"}
 */
function eliminar_renglon() 
{
var found = op_cabecera_to_op_detalle.getSize()
if (found==0)
{
    globals.gtotal_valores=0
    globals.gtotal_comprob=0
}
else
{
	var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea dar de baja? ',  'Si', 'No')
	if (resp == 'Si')
	{

		op_cabecera_to_op_detalle.deleteRecord()
		totales_originales();
		totales_valores()
	}
}

}

/**
 *
 * @properties={typeid:24,uuid:"3C439A12-56FB-4767-890D-C063A265C588"}
 */
function salir_rec() 
{
	if (es_preview == 0)
	{
	 	var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea salir?' ,  'Si', 'No')
		if (resp == 'Si')
		{
			databaseManager.revertEditedRecords()
			databaseManager.setAutoSave(true)
			return true 
		}
	 	else
		{
			return false
		}
	}
	return true
}

/**
 * @properties={typeid:24,uuid:"1152955A-D3D1-4023-9A85-24A11AA2BDBB"}
 */
function totalizar() 
{
	totales_originales();
	var estado = totales_valores(); 
	if (estado == false)  
		return false; 
	return true
}

/**
 *
 * @properties={typeid:24,uuid:"B9C43D2E-5855-40C9-B3DF-CF9C86911E14"}
 */
function Iniciar() 
{
	databaseManager.setAutoSave(false); 
	controller.newRecord(false);
	fecha = application.getServerTimeStamp();
	globals.gFechaAux = fecha;
	letra = "X";     
	globals.gtotal_comprob 		= 0;
	globals.gtotal_valores 		= 0;
	globals.gtotal_saldo		= 0;
	globals.gtotal_retenciones	= 0;
	globals.gdiferencia			= 0; 
	globals.greten_ganan		= 0;
	globals.greten_iva			= 0;
	globals.gtotal_anticipo		= 0;  // para uso de diferencia 
	es_preview					= 0; 
	globals.titulos_resumen();
}

/**
 *
 * @properties={typeid:24,uuid:"4042114F-CBC1-425C-A11A-7BBE9C5545A2"}
 */
function totales_valores()  
{
	var $indice_actual = op_cabecera_to_op_detalle.getSelectedIndex()
	// recalcula total valores
	globals.gtotal_valores = 0
	for ( var i = 1 ; i <= op_cabecera_to_op_detalle.getSize(); i++ )
	{
		op_cabecera_to_op_detalle.setSelectedIndex(i)
		globals.gtotal_valores += op_cabecera_to_op_detalle.importe  
	}
	globals.opago_diferencia(1);	
	op_cabecera_to_op_detalle.setSelectedIndex($indice_actual)
	return true;   
}

/**
 * @returns {Boolean} valid value
 *
 * @properties={typeid:24,uuid:"2287E9DB-3E2C-4CF2-B149-74B4249AF930"}
 */
function elige_proveedor() 
{
	globals.gtotal_saldo	= 0
	globals.gtotal_valores	= 0
	globals.gtotal_comprob	= 0
	
	// salvar_proveedor: porque perdia en codigo de proveedor en el newRecord
	var salvar_proveedor=proveedor_id
	// rollback: porque al cambiar de proveedor dejaba los movs. del anterior
	databaseManager.revertEditedRecords()
	// newRecord: porque al traia datos de la ultima op de ese proveedor en vez de crear uno
	controller.newRecord(false);
	// perdia la fecha y letra seteadas en Iniciar() despues de newRecord
	fecha = application.getServerTimeStamp()   //  new Date();  
	letra = "X";           
	proveedor_id = salvar_proveedor
	globals.marca_primer_find = 0
	globals.marca_primer_find_1 = 0
	return true
}

/**
 *
 * @properties={typeid:24,uuid:"67B420EF-3269-438C-8EC8-EC79A92A85FF"}
 */
function validar_fecha_pago() 
{
for (var i = 1 ; i <= op_cabecera_to_op_detalle.getSize(); i++)
{
//// recorrer cheques    
	op_cabecera_to_op_detalle.setSelectedIndex(i)
	if (op_cabecera_to_op_detalle.cuentas_cyb_id==null)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar cuenta de banco','OK')
			return false;
		}
	if (op_cabecera_to_op_detalle.op_detalle_to_valores.es_cheque==1)	
	{// es cheque
		if (op_cabecera_to_op_detalle.cheque_nro==null) 
		{
			globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar nro. de cheque','OK')
			return false;
		}
	}
}
return true
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"3A4950DA-505F-4B29-B3FA-58479DD68B8A"}
 * @AllowToRunInFind
 */
function buscar_valores(event) 
{
	if (proveedor_id == null || proveedor_id == 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe ingresar proveedor para buscar Ordenes de Pago','OK')
		return;
	}
	// hacer find/search de la relacion y sort para traer solo O.P.
	op_cabecera_to_proveedor.proveedor_to_op_cabecera.find()
	op_cabecera_to_proveedor.proveedor_to_op_cabecera.codigo_movimiento = '!=17'
	var $cant=op_cabecera_to_proveedor.proveedor_to_op_cabecera.search()
	if ($cant == 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No hay Ordenes de Pago para el proveedor','OK')
		return; 
	} 
	
	forms.opago_dev_1_op_cab.foundset.sort('fecha desc')
	forms.opago_dev_1_op_cab.controller.loadRecords(op_cabecera_to_proveedor.proveedor_to_op_cabecera)

	es_preview = 1;
	globals.formEnVentana('opago_dev_1_op_cab','op_prove','Ordenes de Pago del Proveedor')
}

/**
 * @properties={typeid:24,uuid:"E4BAF20B-76C6-4A40-9E25-B917FD2FC1E1"}
 */
function totales_originales() 
{ 
	globals.gtotal_comprob = 0;
	var $cuantos = op_cabecera_to_op_detalle.getSize()
	for (var i = 1 ; i <= $cuantos; i++)
	{
		op_cabecera_to_op_detalle.setSelectedIndex(i)
		globals.gtotal_comprob+= op_cabecera_to_op_detalle.importe_original
	}

}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"93A01AC8-6D12-42E9-8B1D-A3D135A379D2"}
 */
function calcularDiferencia(event) {
	globals.opago_diferencia(1)
}
